import axios from 'axios'

// axios 配置
axios.defaults.timeout = 5000
axios.defaults.headers['Content-Type'] = 'application/json;charset=UTF-8'
// 自动切换环境
axios.defaults.baseURL = '/'

// 请求时的拦截
axios.interceptors.request.use(config => {
    config.headers['token'] = localStorage.getItem('token')
    return config
}, function (error) {
    return Promise.reject(error)
})

// 响应时拦截
axios.interceptors.response.use(response => {
    return response.data
}, (err) => {
    console.log(err)
    if (err.response.status === 401) {
        // console.log(window.location)
        let href = window.location.protocol + '//' + window.location.host + window.location.pathname + '#/authorize'
        window.location.href = href
    }
    return Promise.reject(err.response.data)
})

/**
 * 接口请求GET方法
 * @param url 请求路径 必填
 * @param params 请求参数
 * @returns {Promise}
 */
export function get(url, params) {
    console.group('==============>新请求<==============')
    console.info('请求路径', url)
    if (params) console.info('请求参数：', params)
    return new Promise((resolve, reject) => {
        axios.get(url, params).then(res => {
            console.info('请求成功：', res)
            resolve(res)
            console.groupEnd()
        }).catch(err => {
            console.info('请求失败：', err)
            reject(err)
            console.groupEnd()
        })
    })
}

/**
 * 接口请求POST方法
 * @param url 请求路径 必填
 * @param params 请求参数
 * @returns {Promise}
 */
export function post(url, params) {
    console.group('==============>新请求<==============')
    console.info('请求路径', url)
    if (params) console.info('请求参数：', params)
    return new Promise((resolve, reject) => {
        // axios.post(url, QS.stringify(params)).then(res => {
        axios.post(url, params).then(res => {
            console.info('请求成功：', res)
            resolve(res)
            console.groupEnd()
        }).catch(err => {
            console.info('请求失败：', err)
            reject(err)
            console.groupEnd()
        })
    })
}

/**
 * 接口请求upload方法
 * @param url 请求路径 必填
 * @param params 请求参数
 * @returns {Promise}
 */
export function upload(url, params) {
    console.group('==============>新请求<==============')
    console.info('请求路径', url)
    if (params) console.info('请求参数：', params)
    return new Promise((resolve, reject) => {
        // axios.post(url, QS.stringify(params)).then(res => {
        let config = {
            headers: {
                'Content-Type': 'multipart/form-data'
            }
        }
        axios.post(url, params, config).then(res => {
            console.info('请求成功：', res)
            resolve(res)
            console.groupEnd()
        }).catch(err => {
            console.info('请求失败：', err)
            reject(err)
            console.groupEnd()
        })
    })
}
// 响应拦截器（处理响应数据）
/* axios.interceptors.response.use(
    response => {
        if (response.state === 200) {
            return Promise.resolve(response)
        } else {
            // 这个地方可以由后台编辑状态码区分不同情况，做不同的逻辑处理
            return Promise.reject(response)
        }
    },
    error => {
        // //请求失败，这个地方可以根据error.response.status统一处理一些界面逻辑，比如status为401未登录,可以进行重定向
        // router.replace({
        //     path: '/login',
        //     query: { redirect: router.currentRoute.fullPath }
        //    });
        return Promise.reject(error.response)
    }
) */
